package eventos.aceptar;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JOptionPane;

import logica.Entidad;
import logica.IdExternoInexistenteException;

import controlador.IControladorEntidadExistente;

import vista.objetos.AtributoTipoNoSoportadoException;
import vista.objetos.EntidadGraficable;
import vista.objetos.EntidadTipoNoSoportadoException;
import vista.objetos.GraficableException;
import vista.paneles.TipoEvento;
import vista.ventanas.VentanaEntidadesExistentes;

public class EventoAceptarEntidadExistente  extends MouseAdapter {
	
	private VentanaEntidadesExistentes ventana;
	private IControladorEntidadExistente controlador;
	
	public EventoAceptarEntidadExistente(VentanaEntidadesExistentes ventana, IControladorEntidadExistente controlador)
	{
		super();
		this.ventana = ventana;
		this.controlador = controlador;
	}
	
	public void mouseClicked(MouseEvent e)
	{
		try
		{
			Entidad entidad = this.ventana.getEntidad();
			
			if (entidad == null)
			{
				JOptionPane.showMessageDialog(this.ventana, "No se ha seleccionado ninguna entidad", "Entidad No Seleccionada", JOptionPane.ERROR_MESSAGE);
				return;
			}

			EntidadGraficable entidadGraf = this.controlador.getProyectoActual().getEntidadGraficable(entidad);

			this.ventana.setVisible(false);
		
			this.controlador.dibujarGraficableFlotante(entidadGraf, TipoEvento.AGREGAR_GRAFICABLE_EXISTENTE);

			this.ventana = null;	
		}
		catch (IdExternoInexistenteException error)
		{ // sucede si no se cargan primero las referencias de las entidades y los atributos graficables
			JOptionPane.showMessageDialog(this.ventana, error.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		}
		catch (EntidadTipoNoSoportadoException error)
		{// se supone que no debería pasar
			JOptionPane.showMessageDialog(this.ventana, error.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		}
		catch (AtributoTipoNoSoportadoException error)
		{// se supone que no debería pasar
			JOptionPane.showMessageDialog(this.ventana, error.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		} 
		catch (GraficableException error) 
		{// se supone que no debería pasar
			JOptionPane.showMessageDialog(this.ventana, error.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		} 
	}
}
